home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / CPUSPEED.ZIP / CPUSPED.PAS next >
Pascal/Delphi Source File  |  1994-01-19  |  1KB  |  74 lines

  1. { Finding the CPU speed }
  2. CONST
  3.   Cpu8086  = 1;
  4.   Cpu80286 = 2;
  5.   Cpu80386 = 3;
  6.   Cpu80486 = 4;
  7.  
  8. VAR
  9.   CPU : BYTE;
  10.  
  11.  
  12. FUNCTION CPUSpeed : BYTE; Assembler;
  13. Asm
  14.  MOV   DX,Cpu8086
  15.  PUSH  SP
  16.  POP   AX
  17.  CMP   SP,AX
  18.  JNE   @OUT
  19.  MOV   DX, Cpu80286
  20.  PUSHF
  21.  
  22.  POP   AX
  23.  OR   AX,4000h
  24.  PUSH  AX
  25.  POPF
  26.  PUSHF
  27.  POP   AX
  28.  TEST  AX,4000h
  29.  JE   @OUT
  30.  MOV DX, Cpu80386
  31.  {"DB 66h" indicates '386 extended instruction}
  32.  DB 66h; MOV   BX, SP      {MOV EBX, ESP}
  33.  DB 66h, 83h, 0E4h, 0FCh   {AND ESP, FFFC}
  34.  DB 66h; PUSHF             {PUSHFD}
  35.  DB 66h; POP AX            {POP EAX}
  36.  DB 66h; MOV   CX, AX      {MOV ECX, EAX}
  37.  DB 66h, 35h, 00h
  38.  DB 00h, 04h, 00           {XOR EAX, 00040000}
  39.  DB 66h; PUSH   AX     {PUSH EAX}
  40.  
  41.  DB 66h; POPF              {POPFD}
  42.  DB 66h; PUSHF             {PUSHFD}
  43.  DB 66h; POP   AX     {POP EAX}
  44.  DB 66h, 25h, 00h
  45.  DB 00h, 04h, 00h          {AND EAX, 00040000}
  46.  DB 66h, 81h, 0E1h, 00h
  47.  DB 00h, 04h, 00h          {AND ECX, 00040000}
  48.  DB 66h; CMP   AX, CX      {CMP EAX, ECX}
  49.  JE @Not486
  50.  MOV DX, Cpu80486
  51. @Not486:
  52.  DB 66h; PUSH   CX         {PUSH EXC}
  53.  DB 66h; POPF              {POPFD}
  54.  DB 66h; MOV   SP, BX      {MOV ESP, EBX}
  55. @Out:
  56.  MOV AX, DX
  57. end;
  58.  
  59.  
  60. begin { main }
  61.  
  62.  
  63.   CPU := CPUSpeed;  { 1, 2, 3, or 4 is returned; see above consts }
  64.   case cpu of
  65.   1 : Writeln('Cpu is a 8086');
  66.   2 : writeln('Cpu ia a 80286');
  67.   3 : writeln('Cpu is a 80386');
  68.   4 : writeln('Cpu is a 80486');
  69.   end;
  70.  
  71. end.
  72.  
  73.  
  74.